import 'package:flutter/widgets.dart';

class MenuPageTranslation {
  static final delegate = _MenuPageTranslationDelegate();

  static MenuPageTranslation of(BuildContext context) {
    return Localizations.of(context, MenuPageTranslation);
  }

  late String _languageCode;

  Future<void> load(Locale locale) async {
    _languageCode = locale.languageCode;
  }

  String _resolve(Map<String, String> translations) {
    return translations[_languageCode]!;
  }

  String get title {
    return _resolve(const {
      'ru': 'Меню',
      'en': 'Menu',
    });
  }

  String get signingInTileTitle {
    return _resolve(const {
      'ru': 'Войти',
      'en': 'Sign in',
    });
  }

  String get signingUpTileTitle {
    return _resolve(const {
      'ru': 'Создать аккаунт',
      'en': 'Create an account',
    });
  }

  String get signingOutTileTitle {
    return _resolve(const {
      'ru': 'Выйти',
      'en': 'Sign out',
    });
  }

  String get accountTileGroupHeader {
    return _resolve(const {
      'ru': 'Аккаунт',
      'en': 'Account',
    });
  }

  String get accountTileGroupFooter {
    return _resolve(const {
      'ru': 'Аккаунт нужен для синхронизации покупок из магазинов приложений и c сайта angrywords.ru.',
      'en': 'An account is needed to synchronize purchases from stores and from angrywords.ru.',
    });
  }

  String get purchaseTileGroupHeader {
    return _resolve(const {
      'ru': 'Покупки',
      'en': 'Purchases',
    });
  }

  String get purchasePageOpeningTileTitle {
    return _resolve(const {
      'ru': 'Angry\u00a0Words\u00a0Pro',
      'en': 'Angry\u00a0Words\u00a0Pro',
    });
  }

  String get subscriptionManagementTileTitle {
    return _resolve(const {
      'ru': 'Управление подпиской',
      'en': 'Subscription management',
    });
  }

  String get purchaseRestorationTileTitle {
    return _resolve(const {
      'ru': 'Восстановить покупки',
      'en': 'Restore purchases',
    });
  }

  String get paymentThroughWebsiteTileTitle {
    return _resolve(const {
      'ru': 'Оплата через сайт',
      'en': 'Payment through website',
    });
  }

  String get iosPaymentBySimCardTileTitle {
    return _resolve(const {
      'ru': 'Оплата с SIM-карты',
      'en': 'Payment by SIM card',
    });
  }

  String get progressTileGroupHeader {
    return _resolve(const {
      'ru': 'Прогресс',
      'en': 'Progress',
    });
  }

  String get backupCreationTileTitle {
    return _resolve(const {
      'ru': 'Сохранить прогресс в файл',
      'en': 'Save progress to the file',
    });
  }

  String get restorationFromBackupTileTitle {
    return _resolve(const {
      'ru': 'Восстановить прогресс из файла',
      'en': 'Restore progress from the file',
    });
  }

  String get invalidBackupFormatDialogTitle {
    return _resolve(const {
      'ru': 'Неверный формат файла резервной копии',
      'en': 'Invalid backup format',
    });
  }

  String get progressResetTileTitle {
    return _resolve(const {
      'ru': 'Сбросить прогресс',
      'en': 'Reset progress',
    });
  }

  String get progressResetConfirmationDialogTitle {
    return _resolve(const {
      'ru': 'Ты действительно хочешь сбросить весь прогресс?',
      'en': 'Are you sure you want to reset all progress?',
    });
  }

  String get progressResetConfirmationDialogConfirmationAnswer {
    return _resolve(const {
      'ru': 'Сбросить весь прогресс',
      'en': 'Reset all progress',
    });
  }

  String get feedbackTileGroupHeader {
    return _resolve(const {
      'ru': 'Обратная связь',
      'en': 'Feedback',
    });
  }

  String get iosAppRatingTileTitle {
    return _resolve(const {
      'ru': 'Оценить приложение в App\u00a0Store',
      'en': 'Rate app in the App\u00a0Store',
    });
  }

  String get androidAppRatingTileTitle {
    return _resolve(const {
      'ru': 'Оценить приложение в Google\u00a0Play',
      'en': 'Rate app in the Google\u00a0Play',
    });
  }

  String get telegramChannelTileTitle {
    return _resolve(const {
      'ru': 'Открыть Telegram-канал',
      'en': 'Open Telegram channel',
    });
  }

  String get writingToDevelopersByEmailTileTitle {
    return _resolve(const {
      'ru': 'Написать разработчикам на почту',
      'en': 'Write to developers by email',
    });
  }

  String get appLinkSharingTileTitle {
    return _resolve(const {
      'ru': 'Поделиться ссылкой на приложение',
      'en': 'Share link to the app',
    });
  }

  String get aboutTileTitle {
    return _resolve(const {
      'ru': 'О приложении',
      'en': 'About',
    });
  }

  String get accountDeletionTileTitle {
    return _resolve(const {
      'ru': 'Удалить аккаунт',
      'en': 'Delete account',
    });
  }

  String get sharePopupTitle {
    return _resolve(const {
      'ru': 'Поделиться',
      'en': 'Share',
    });
  }

  String get accountDeletionConfirmationDialogTitle {
    return _resolve(const {
      'ru': 'Ты действительно хочешь удалить свой аккаунт?',
      'en': 'Are you sure you want to delete your account?',
    });
  }

  String get accountDeletionConfirmationDialogConfirmationAnswer {
    return _resolve(const {
      'ru': 'Удалить аккаунт',
      'en': 'Delete account',
    });
  }

  String get serverFailureText {
    return _resolve(const {
      'ru': 'Что-то пошло не так. Попробуй ещё раз позже.',
      'en': 'Something went wrong. Try again later.',
    });
  }

  String get networkFailureText {
    return _resolve(const {
      'ru': 'Ошибка соединения. Проверь своё интернет подключение и попробуй ещё раз.',
      'en': 'Connection error. Check your internet connection and try again.',
    });
  }

  String get unauthorizedFailureText {
    return _resolve(const {
      'ru': 'Ошибка авторизации. Попробуй войти в свой аккаунт.',
      'en': 'Authorization error. Try to sign in in your account.',
    });
  }
}

class _MenuPageTranslationDelegate extends LocalizationsDelegate<MenuPageTranslation> {
  @override
  bool isSupported(Locale locale) => const ['ru', 'en'].contains(locale.languageCode);

  @override
  bool shouldReload(LocalizationsDelegate<MenuPageTranslation> old) => false;

  @override
  Future<MenuPageTranslation> load(Locale locale) async {
    final translation = MenuPageTranslation();
    await translation.load(locale);
    return translation;
  }
}
